import { MessageService, MessageType } from '../services/message.service';
import './content.scss';

/**
 * 内容脚本类
 * 负责与网页内容交互
 */
class ContentScript {
  /**
   * 构造函数
   */
  constructor() {
    this.initialize();
  }

  /**
   * 初始化内容脚本
   */
  private initialize(): void {
    console.log('WebPost 内容脚本初始化');
    this.setupListeners();
  }

  /**
   * 设置事件监听器
   */
  private setupListeners(): void {
    // 监听来自扩展的消息
    MessageService.addListener(this.handleMessage.bind(this));
  }

  /**
   * 处理消息
   * @param message 消息
   * @param sender 发送者
   * @param sendResponse 响应函数
   */
  private async handleMessage(
    message: any,
    sender: chrome.runtime.MessageSender,
    sendResponse: (response?: any) => void
  ): Promise<void> {
    console.log('Content script received message:', message.type);
    
    switch (message.type) {
      case MessageType.CAPTURE_REQUEST:
        await this.handleCaptureRequest(sendResponse);
        break;
        
      default:
        console.warn('Unknown message type:', message.type);
        sendResponse({ success: false, error: 'Unknown message type' });
    }
  }

  /**
   * 处理捕获请求
   * @param sendResponse 响应函数
   */
  private async handleCaptureRequest(sendResponse: (response?: any) => void): Promise<void> {
    try {
      // 从页面的网络请求中收集信息
      // 注：内容脚本无法直接捕获网络请求，这主要由背景脚本完成
      // 我们可以使用Performance API获取一些信息
      if (window.performance && window.performance.getEntries) {
        const entries = window.performance.getEntries();
        const resources = entries.filter(entry => entry.entryType === 'resource');
        
        if (resources.length > 0) {
          // 获取最新的资源
          const latestResource = resources[resources.length - 1];
          
          // 提取URL
          const url = latestResource.name;
          
          // 创建简单请求对象
          const request = {
            url,
            method: 'GET', // 注：Performance API不提供HTTP方法信息
            timestamp: Date.now()
          };
          
          sendResponse({ success: true, request });
          return;
        }
      }
      
      // 如果无法获取到请求信息
      sendResponse({ success: false, error: '无法在当前页面捕获请求' });
    } catch (error) {
      console.error('Error handling capture request:', error);
      sendResponse({ success: false, error: String(error) });
    }
  }
}

// 创建内容脚本实例
new ContentScript(); 